1. Field of the Invention
The present invention relates to a method, system, and program for prioritizing input/output (I/O) requests submitted to a device driver.
2. Description of the Related Art
A host or server system may concurrently execute multiple application programs that generate Input/Output (I/O) requests that are transmitted to a host bus adaptor providing a link to a storage subsystem. The storage subsystem may be comprised of multiple disks, such as the case with a Direct Access Storage Device (DASD), Just a Bunch of Disks (JBOD), a Redundant Array of Independent Disks (RAID), etc. In such subsystems, each application executing in the host may be assigned to use a particular logical volume in the storage subsystem, also referred to as a Logical Unit Number (LUN).
Certain applications executing in a host may be mission critical. For instance, database application programs may require immediate read/write access to storage to ensure that updates are hardened in storage and requested data is received immediately because performance delays could have costly consequences. For instance a large database for a financial institution receiving real-time financial transactions is mission critical in that it is imperative that such real-time financial transactions be immediately applied to storage and that account data be immediately accessible to the application to enable authorized transactions. On the other hand, other applications executing in the host may not be mission critical and the data they generate is of less critical value. For instance, an accounting or engineering department may not need immediate access to data. Further, the loss of data may not result in significant liability and lost data may readily be recovered or reconstructed.
There is a need in the art to provide an improved technique for handling I/O requests for different applications executing within a host that is sensitive to the importance of the I/O requests generated from different applications.
Provided is a method, system, and program for managing Input/Output (I/O) requests generated by an application program. The I/O requests are transmitted to an output device. A determination is made of a priority associated with the I/O request, wherein the priority is capable of being at least one of a first priority and a second priority. The I/O request is transmitted if the determined priority is the first priority. Transmittal of the I/O request is deferred if the determined priority is the second priority.
Additionally, the determined priority is related to a priority associated with the application that generated the I/O request.
Still further, the output device may comprise a storage device comprised of at least one logical volume, wherein the I/O request is directed toward the one logical volume in the storage device. In such case, a data structure capable of associating one or more of the logical volumes with the first or second priority is provided, wherein determining the priority associated with the I/O request comprises determining from the data structure whether the logical volume of the I/O request is associated with the first priority or second priority.
In still further implementations, a detention is made as to whether any I/O requests of the first priority are pending at a location, such as a device driver. The transmittal of the I/O requests of the second priority are deferred if there are any I/O requests of the first priority pending at the location. The I/O request of the second priority are transmitted to the location if there are no I/O requests of the first priority pending at the device driver.
The described implementations provide a technique for managing the flow of I/O requests to a device driver to ensure that I/O requests associated with a higher priority application or storage space receive preference in processing at the device driver over I/O requests associated with a lower priority.